Memory devices have a wide variety of uses in modern electronics, including computers, cameras, voice recorders, cell phones, portable storage drives, and similar devices. In addition, many types of memory devices have been developed to effectuate such uses. Flash memory, for example, is one type of electronic memory media that can store, erase and restore data. Furthermore, Flash memory is non-volatile, unlike some types of electronic memory, and thus Flash memory can retain stored data without a continuous source of electrical power. Flash memory has become a popular device for consumer electronics, due in part to a combination of the high density and low cost of erasable programmable read only memory (EPROM) and electrical erasability introduced with electronically erasable programmable read only memory (EEPROM). Because Flash memory is non-volatile and compatible with many electronic devices, users can readily transport data stored on Flash and swap such data among various devices. Thus, a user can take a picture on a digital camera, store the picture digitally on a Flash cartridge, remove the Flash cartridge from the camera and insert it into a digital image viewer (e.g., connected to a television), or onto a computer to view the picture, edit the picture in software, upload the picture to a remote web server, share the picture via e-mail, and so on. Because of the versatility of non-volatile electrically erasable memory, Flash and other such memory have become a useful and popular mechanism for storing, transporting, sharing and maintaining data.
To further increase storage density (e.g., number of storable bits per unit area or volume), modern memory cells can store multiple bits. Such cells are also referred to as multi-level cells. Single-level cells each store only a single bit of information, by programming the cell, or leaving the cell un-programmed. Multi-level cells, on the other hand, can store multiple bits of information by programming the cell to multiple levels. For instance, a cell that can maintain three distinct program levels (e.g., erased, first program level, second program level, and third program level) can store two bits of information. In addition to the foregoing, mirror cell technology enables a single memory cell to contain two neighboring memory cells. Thus, storage density can be greatly increased by utilizing multi-bit mirror cells on a single memory die.
The advent of multi-bit memory cells adds complexity to memory design. For instance, retention charge loss or charge gain can impact the state of the multi level cells and cause errors during read operation. Also, a bit of a memory cell can affect, and be affected by, bit levels of a neighboring mirror cell. Thus, for instance, if one cell is un-programmed and the neighboring cell is programmed to a high level, the relative disparity in stored charge between the neighboring cells can increase stored charge of the un-programmed cell (or, e.g., decrease the stored charge depending on erase/program convention) and decrease stored charge of the programmed cell. Over time, this phenomenon can lead to errors, where a cell programmed to one bit state (e.g., a second program level), loses/gains enough charge so as to be indistinguishable from another bit state (e.g., a first program level). As another example of added complexity, error detection and correction algorithms, relatively simple for single-bit errors, can become very complicated for multi-bit errors. Increased memory density can sometimes result in more multi-bit errors, requiring use of complicated, and time consuming, detection/correction algorithms. Accordingly, mechanisms to speed up error detection/correction and minimize the resources used can be helpful.